#ifndef _VECTOR_H_
#define _VECTOR_H_

// 动态数组 - 使C语言用面向对象的方式编码，实际上面向对象或者基于对象范式的语言， 成员方法编译之后， 
// 函数形式就是如下形式， 第一个隐藏参数就是当前“对象”的引用（指针）。 
typedef struct Vector {
    int* elems;
    int size;
    int cap; 
} Vector; 

// 向量操作
// 构造函数
void VectorNew(Vector* vector);

// 添加
void VectorAddFirst(Vector* vector, int elem); 
void VectorAdd(Vector* vector, int index, int elem);
void VectorAddLast(Vector* vector, int elem); 

// 查询
int VectorGetFirst(Vector* vector);
int VectorGet(Vector* vector, int index);
int VectorGetLast(Vector* vector);

// 修改
int VectorSet(Vector* vector, int index, int elem); 

// 删除
int VectorRemoveFirst(Vector* vector);
int VectorRemove(Vector* vector, int index);
int VectorRemoveLast(Vector* vector);

// 查找
int VectorFind(Vector* vector, int elem); 

// 判断
int VectorContains(Vector* vector, int elem); 

// 打印
void VectorString(Vector* vector);

int VectorSize(Vector* vector); 
int VectorIsEmpty(Vector* vector); 

// 析构函数
void VectorDispose(Vector* vector); 

#endif 